home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / tsr25src.arc / RAMFREE.ASM < prev    next >
Assembly Source File  |  1987-05-02  |  2KB  |  66 lines

  1. ;RAMFREE
  2. ;determine amount of available RAM without using CHKDSK
  3. ;Kim Kokkonen, TurboPower Software, 6/85, 408-438-8608
  4. ;written for MicroSoft Assembler version 4.0
  5. ;only works for up to 640K bytes
  6. ;
  7. Cseg    segment public para
  8.         assume  cs:Cseg, ds:Cseg, es:Cseg
  9.         org     100H
  10.  
  11. ramfree proc    near
  12.  
  13. ;shrink memory available to this program
  14. coment: mov     bx,offset theend
  15.         mov     cl,4
  16.         shr     bx,cl           ;convert bytes to paragraphs
  17.         inc     bx              ;round up to be safe
  18.         mov     ah,4AH
  19.         int     21H             ;DOS SETBLOCK function
  20.  
  21. ;try to allocate the maximum memory
  22.         mov     ah,4AH
  23.         mov     bx,0FFFFH
  24.         int     21H             ;use SETBLOCK again
  25.                                 ;BX contains number of paragraphs available
  26.  
  27. ;convert paragraphs to a doubleword number of bytes in dx:ax
  28.         mov     ax,bx
  29.         xor     dx,dx
  30.         mov     dl,ah           ;dl will contain top four bytes of ah
  31.         mov     cl,4
  32.         shr     dx,cl
  33.         shl     ax,cl
  34.  
  35. ;convert doubleword to a six char ASCII number
  36.         mov     bx,offset nbyts
  37.         add     bx,6            ;move past end of string
  38.  
  39.         mov     si,10           ;prepare to divide by 10
  40. nexdgt: div     si              ;divide dx:ax by si
  41.         or      dx,30H          ;convert remainder to ASCII digit
  42.         dec     bx              ;backup in buffer
  43.         mov     [bx],dl         ;store character
  44.         xor     dx,dx           ;clear remainder
  45.         or      ax,ax           ;all done?
  46.         jnz     nexdgt          ;do next digit
  47.  
  48. ;now output the string
  49.         mov     dx,offset bmess$
  50.         mov     ah,09H
  51.         int     21H             ;print string
  52.  
  53. ;exit
  54.         mov     ax,4C00H
  55.         int     21H
  56.  
  57. ramfree endp
  58.  
  59. ;data area
  60. bmess$  db      13,10,'RAM bytes available: '
  61. nbyts   db      32,32,32,32,32,32,13,10,36 ;will hold ASCII number of bytes
  62. theend  label   byte
  63.  
  64. Cseg    ends
  65.         end     ComEnt
  66.